************************************************ * Welcome to the Scorpion Field Test * ************************************************ ----------------- TABLE OF CONTENTS ----------------- 1. Installation Installing this field test on your hard disk Configuring this field test with Polaris or Vulcan Configuring Earlier Language products and this field test Changes to SYSTEM.INI file Configuring the Windows NT command prompt 2. Features 3. Important Information Stepping into Delphi's Dynamic Methods The Turbo Debugger User's Guides WREMOTE and Delphi Exception handling Video Conflicts Memory Requirements Object file format Make Out of Memory and MAKESWAP Creating 16-bit import libraries from .DEF files Make under Windows NT New Tools Turbo Debugger for Windows 4. Enhanced MASM Compatibility 5. Known problems --------------- 1. INSTALLATION --------------- Installing this field test on your hard disk: ----------------------------------------------------- 1. Put the install disk in a 3.5" floppy drive. 2. Change to that drive and type INSTALL 3. Fill in directories as appropriate, and INSTALL will create appropriate Windows groups, and add the appropriate files to the directories you selected. Notes on using Scorpion with previous versions of Borland Tools --------------------------------------------------------------- This product is designed to be used as a standalone product or in conjunction with Polaris or Vulcan. It can also be used with Borland/Turbo C++ 4.x, Borland Pascal 7 or Delphi 1.0. If you are using Scorpion in conjunction with any of these shipping compiler products, they should be installed such that shared components are drawn from Scorpion. (i.e.: \tasm5\bin comes before \bc45\bin in your path.) If you already have Vulcan, Polaris, Delphi, Borland C++ 4.x, or Turbo C++ 4.5 on your hard disk, then it is also safe to install Scorpion into the existing product directory. If you are installing Delphi, or Borland C++ 4.x AFTER this field test has been installed, you will have to manually change the system settings that allow these products to coexist: In your system.ini file, check your [386Enh] section for multiple entries for the device TDDEBUG.386. Remove duplicate entries of TDDEBUG.386 so that only the version from this product is loaded. On disk, you may also want to rename or remove the BP7 or BC4.x versions of TDDEBUG.386 and TDWINTH.DLL to avoid their accidental loading. You must restart Windows after making changes to system.ini. Different versions of TDW may not be run simultaneously. Make sure that old copies of TDW.INI are removed from your system. (Running the utility TDWINI.EXE will make sure that this takes place.) Changes to SYSTEM.INI file -------------------------- The install program makes these changes to the SYSTEM.INI file: 1) Adds "device=c:\tasm\bin\windpmi.386" to support our 32-bit tools. 2) Adds "device=c:\tasm\bin\tddebug.386" to support our debugger. Configuring the Windows NT command prompt ----------------------------------------- To run 16-bit protected-mode programs (tlink) under an NT command prompt you need to add the following line to CONFIG.NT: ntcmdprompt Under the default NT command-line prompt, DOS COMMAND.COM is run after returning from a TSR (such as RTM.EXE which bcc and tlink load). Adding the above line will cause the original NT CMD.EXE to be run. ----------- 2. FEATURES ----------- - Enhanced MASM compatibility (see item #4) - Dual monitor support under Win95 (tdw -do, td32 -vd) - Support for new language constructs (bool, namespaces, etc.) - Thunk Compiler compatibility ------------------------ 3. IMPORTANT INFORMATION ------------------------ Stepping into Delphi's Dynamic Methods -------------------------------------- By default, single-stepping through a program skips over dynamic methods and does not step into them. That's because TDW normally determines all the single-step stop points when the program is first loaded, at which time dynamic methods are not yet defined. By following these steps, however, you can change the way TDW determines stop points and make it possible to step into dynamic methods. 1) Choose View|Execution History. 2) Invoke the Execution History SpeedMenu, either by clicking the right mouse button or by pressing Alt+F10. 3) Toggle the "Full history" option from No to Yes. Now you can step into dynamic methods. WREMOTE and Delphi Exception handling ------------------------------------- Exception handling in a Delphi application is not visible from WREMOTE. To debug exception handling code, use TDW locally. Video Conflicts --------------- There are known conflicts between TDW's SVGA video DLL and some video drivers. To solve the problem, reconfigure TDW to use TDWGUI.DLL or Windows to use a standard VGA or SVGA driver. Object File Format ------------------ This product is designed to use and generate only object files which adhere to the Intel OMF (Object Module Format) specification. This means that TLINK32 and TLIB only accept files of this format, and all provided libraries use this format. There is no support in the linker or librarian for COFF object modules produced by Microsoft C tools. Out of Memory and MAKESWAP -------------------------- If you get "Out of Memory" errors from DOS when running the command-line tools, create a swap file with the MAKESWAP utility. (Note that this applies to DOS only, not to DOS boxes opened under Windows.) MAKESWAP takes the size of the file to create in KBytes, for example: MAKESWAP 12000 will create a 12MB swap file in the current directory called EDPMI.SWP for use by Borland command line tools. To enable the swap file, use the DPMI32 environment variable by issuing the following command at the DOS prompt: set DPMI32=SWAPFILE \EDPMI.SWP Make under Windows NT --------------------- If you encounter difficulties running MAKE under Windows NT, try running MAKER instead. Creating 16-bit import libraries from .DEF files ------------------------------------------------ Use the /o implib switch when creating 16-bit import libraries from .DEF files to prevent implib from generating extensions for import entry module names. ------------------------------ 4. Enhanced MASM Compatibility ------------------------------ Code that was already running under TASM, even with -umxxx or QUIRKS should still run. TASM merely accepts the MASM way or option to specify something and then pays little actual attention to it -- a la QUIRKS. You can now use the following MASM features which are equivalent to IDEAL mode features: MASM IDEAL ---- ----- STRUCT STRUC EXTERN EXTRN BYTE DB WORD DW DWORD DD TBYTE DT QWORD DQ EXTERNDEF GLOBAL PROTO PROCDESC Conditionals ------------ You can write C-like conditional and control statements that produce code. Thus you may have such code as: .while (ax > 3) && bx == 4 ... ... .endw C-style conditional operators ( =, !=, >=, etc_) are all accepted, and the directives that work are: .while .repeat .if .else .endif .endw .until .untilcxz .break .break.if .continue .continue.if Some special symbols for machine flags are introduced also and may be used in the conditional statements. They are: carry? overflow? parity? sign? and zero? Note that he code that is generated is "sign"- sensitive. MASM has introduced not only BYTE and WORD as definitional directives, but has also added SBYTE, SWORD, SDWORD (and REAL4, REAL8, and REAL10). In general, AX and other registers are considered as unsigned, so to make a comparison like AX >= 0 meaningful, you must write something like .WHILE SWORD PTR AX >= 0 .ENDW which will generate cmp ax,0 jl past the endw line Simply writing .WHILE AX >= 0 will generate cmp ax,0 jb .... which simply will not work because that comparison will not generate a carry bit. So be careful when using these .conditionals. Macros ------ TEXTEQU is introduced as a new way to handle text macros. Macro commands FOR, FORC, and REPEAT are introduced. They work just like IRP, IRPC, and REPT. Several directives for listing files are added: .LISTALL, .LISTIF, .LISTMACRO, .LISTMACROALL, .NOLIST, .NOLISTIF, .NOLISTMACRO, SUBTITLE However, they introduce no functionality beyond commands that already exist in TASM. Subroutines and Calls --------------------- PROC declarations have been extended and a PROTO directive has been added that allow one to declare subroutines in a C- (if not C++) like fashion. It includes stipulating calling-sequence language type, parameter-types for stuff on the stack, and even visibility (PUBLIC, PRIVATE, etc.). An INVOKE command has been added to generate code to call such a proc. It includes sign-extension, etc., according to the type of parameter in the proc prototype and the type of variable in the call. OPTIONS ------- The specific options detailed below have been implemented. Any other OPTIONs will not be implemented and will be silently ignored. It is important to note that the assembler will not generate and error or warning for things that is has not implemented. The syntax is: OPTION KEYWORD any particulars depending on keyword Here is a list (and little more) of the options: OLDSTRUCTS NOOLDSTRUCTS ; MASM forbade some things and allowed others M510 NOM510 ; be compatible with the popular masm 5.1 implies OLDSTRUCTS, OLDMACROS, EXPR16, SETIF2:TRUE, DOTNAME, etc. EXPR16 EXPR32 ; default # bits when calculating LJMP NOLJMP ; automatically adjust conditional jumps PROC: PUBLIC or PRIVATE or EXPORT ; default mode that procs have at link time PROLOGUE EPILOGUE ; into macros for PROC entry & exit NOKEYWORD ; proviso for using old code that has now-illegal symbols (such as OLD or EXTERN) OLDMACROS NOOLDMACROS ; mostly a matter of punctuation change DOTNAME NODOTNAME ; allow symbols to start with a dot OFFSET: GROUP or SEGMENT or FLAT ; how to treat the OFFSET operator SCOPED NOSCOPED ; whether to allow 2 subroutines to have identical internal tags SETIF2: TRUE or FALSE ; how & whether to handle error conditionals like .ERR2 NOSIGNEXTEND ; code generation for some boolean operations SEGMENT: USE16 or USE32 or FLAT ; the default segment type CASEMAP: None or NOTPUBLIC or ALL ; control linking as to upper-lower case externals and publics. Similar to & interacts with /MX, /ML command line ops EMULATOR NOEMULATOR ; how to generate floating point code READONLY NOREADONLY ; to keep code from knowingly being able to clobber itself LANGUAGE: C or PASCAL or FORTRAN or BASIC or SYSCALL or STDCALL ; mainly affects treatment of entry & exit of PROCS ------------------------ 5. Known Problems ------------------------ File | Attach does not work in TD32. Inspecting methods in Delphi objects may lead to a crash. TD32 cannot debug Win32 apps under Win32s. Remote network debugging is not currently supported.